# 题目：给你两个正整数数组 nums1 和 nums2 ，数组的长度都是 n 。
#       数组 nums1 和 nums2 的 绝对差值和 定义为所有 |nums1[i] - nums2[i]|（0 <= i < n）的 总和（下标从 0 开始）。
#       你可以选用 nums1 中的 任意一个 元素来替换 nums1 中的 至多 一个元素，以 最小化 绝对差值和。
#       在替换数组 nums1 中最多一个元素 之后 ，返回最小绝对差值和。因为答案可能很大，所以需要对 109 + 7 取余 后返回。
#       |x| 定义为：
#           如果 x >= 0 ，值为 x ，或者
#           如果 x <= 0 ，值为 -x  


# 示例：
#       输入：nums1 = [1,10,4,4,2,7], nums2 = [9,3,5,1,7,4]
#       输出：20
#       解释：将第一个元素替换为第二个元素：[1,10,4,4,2,7] => [10,10,4,4,2,7]
#       绝对差值和为 |10-9| + |10-3| + |4-5| + |4-1| + |2-7| + |7-4| = 20


import numpy as np


def minAbsoluteSumDiff(nums1, nums2):

    # 1.找到最大差值的位置i
    difference_value = [abs(i)
                        for i in list(np.array(nums1)-np.array(nums2))]
    max_index = difference_value.index(max(difference_value))

    # 2.找到nums1中最接近nums2[i]的元素
    negative_slice = [i for i in nums1 if i <= nums2[max_index]]
    # .sort()函数和append()函数一样，返回None
    negative_slice.sort()
    positive_slice = sorted([i for i in nums1 if i > nums2[max_index]])
    replace_nums1_max_index = negative_slice[-1] if abs(negative_slice[-1]-nums2[max_index]) < abs(
        positive_slice[0]-nums2[max_index]) else positive_slice[0]

    # 3.替换元素
    nums1[max_index] = replace_nums1_max_index

    # 4.计算差值和
    res = sum(abs(i) for i in list(np.array(nums1)-np.array(nums2)))
    print(res)
    return res


if __name__ == "__main__":
    nums1 = [1, 10, 4, 4, 2, 7]
    nums2 = [9, 3, 5, 1, 7, 4]
    minAbsoluteSumDiff(nums1, nums2)
